def find_optimal_order(n, times):  
    # 创建包含时间和位置的元组列表  
    nodes = [(time, i + 1) for i, time in enumerate(times)]  
      
    # 根据时间排序（升序），同时保留位置信息  
    nodes.sort(key=lambda x: x[0])  
      
    # 计算总时间和平均时间  
    total_time = sum(time * (n - i - 1) for i, (time, _) in enumerate(nodes))  
    average_time = total_time / n  
      
    # 输出排序后的位置和平均时间  
    print(" ".join(map(str, [pos for _, pos in nodes])))  
    print(f"{average_time:.2f}")  
  
# 读取输入  
n = int(input())  
times = list(map(int, input().split()))  
  
# 调用函数  
find_optimal_order(n, times)
